"""
https://leetcode.cn/problems/add-two-numbers/description/

2. 两数相加
已解答
中等
相关标签
premium lock icon
相关企业
给你两个 非空 的链表，表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的，并且每个节点只能存储 一位 数字。

请你将两个数相加，并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外，这两个数都不会以 0 开头。

 

示例 1：


输入：l1 = [2,4,3], l2 = [5,6,4]
输出：[7,0,8]
解释：342 + 465 = 807.
示例 2：

输入：l1 = [0], l2 = [0]
输出：[0]
示例 3：

输入：l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出：[8,9,9,9,0,0,0,1]
 

提示：

每个链表中的节点数在范围 [1, 100] 内
0 <= Node.val <= 9
题目数据保证列表表示的数字不含前导零

"""

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
from typing import Optional
from list_node import ListNode,calc_arr,create_list_node


class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        temp1=l1
        temp2=l2
        res=res_temp=ListNode()
        flag=0
        while temp1 and temp2:
            res_val=temp1.val+temp2.val+flag
            if res_val>=10:
                res_temp.next=ListNode(res_val%10)
                flag=1
            else:
                res_temp.next=ListNode(res_val)
                flag=0
            res_temp=res_temp.next
            temp1=temp1.next
            temp2=temp2.next

        while temp1:
            if not flag:
                res_temp.next=temp1
                break
            res_val=temp1.val+1
            if res_val>=10:
                res_temp.next=ListNode(res_val%10)
                flag=1
            else:
                res_temp.next=ListNode(res_val)
                flag=0
            res_temp=res_temp.next
            temp1=temp1.next

        while temp2:
            if not flag:
                res_temp.next=temp2
                break
            res_val=temp2.val+1
            if res_val>=10:
                res_temp.next=ListNode(res_val%10)
                flag=1
            else:
                res_temp.next=ListNode(res_val)
                flag=0
            res_temp=res_temp.next
            temp2=temp2.next

        if flag:
            res_temp.next=ListNode(1)

        return res.next

if __name__=='__main__':
    l1 = [9,9,1]
    l2 = [1]
    node1=create_list_node(l1)
    node2=create_list_node(l2)

    res=Solution().addTwoNumbers(node1,node2)
    print(calc_arr(res))

    pass